home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / FlexLexer.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-04-25  |  6.0 KB  |  205 lines

  1. // -*-C++-*-
  2. // FlexLexer.h -- define interfaces for lexical analyzer classes generated
  3. // by flex
  4.  
  5. // Copyright (c) 1993 The Regents of the University of California.
  6. // All rights reserved.
  7. //
  8. // This code is derived from software contributed to Berkeley by
  9. // Kent Williams and Tom Epperly.
  10. //
  11. //  Redistribution and use in source and binary forms, with or without
  12. //  modification, are permitted provided that the following conditions
  13. //  are met:
  14.  
  15. //  1. Redistributions of source code must retain the above copyright
  16. //  notice, this list of conditions and the following disclaimer.
  17. //  2. Redistributions in binary form must reproduce the above copyright
  18. //  notice, this list of conditions and the following disclaimer in the
  19. //  documentation and/or other materials provided with the distribution.
  20.  
  21. //  Neither the name of the University nor the names of its contributors
  22. //  may be used to endorse or promote products derived from this software
  23. //  without specific prior written permission.
  24.  
  25. //  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  26. //  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  27. //  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  28. //  PURPOSE.
  29.  
  30. // This file defines FlexLexer, an abstract class which specifies the
  31. // external interface provided to flex C++ lexer objects, and yyFlexLexer,
  32. // which defines a particular lexer class.
  33. //
  34. // If you want to create multiple lexer classes, you use the -P flag
  35. // to rename each yyFlexLexer to some other xxFlexLexer.  You then
  36. // include <FlexLexer.h> in your other sources once per lexer class:
  37. //
  38. //    #undef yyFlexLexer
  39. //    #define yyFlexLexer xxFlexLexer
  40. //    #include <FlexLexer.h>
  41. //
  42. //    #undef yyFlexLexer
  43. //    #define yyFlexLexer zzFlexLexer
  44. //    #include <FlexLexer.h>
  45. //    ...
  46.  
  47. #ifndef __FLEX_LEXER_H
  48. // Never included before - need to define base class.
  49. #define __FLEX_LEXER_H
  50.  
  51. #include <iostream>
  52. #  ifndef FLEX_STD
  53. #    define FLEX_STD std::
  54. #  endif
  55.  
  56. extern "C++" {
  57.  
  58. struct yy_buffer_state;
  59. typedef int yy_state_type;
  60.  
  61. class FlexLexer {
  62. public:
  63.     virtual ~FlexLexer()    { }
  64.  
  65.     const char* YYText()    { return yytext; }
  66.     int YYLeng()        { return yyleng; }
  67.  
  68.     virtual void
  69.         yy_switch_to_buffer( struct yy_buffer_state* new_buffer ) = 0;
  70.     virtual struct yy_buffer_state*
  71.         yy_create_buffer( FLEX_STD istream* s, int size ) = 0;
  72.     virtual void yy_delete_buffer( struct yy_buffer_state* b ) = 0;
  73.     virtual void yyrestart( FLEX_STD istream* s ) = 0;
  74.  
  75.     virtual int yylex() = 0;
  76.  
  77.     // Call yylex with new input/output sources.
  78.     int yylex( FLEX_STD istream* new_in, FLEX_STD ostream* new_out = 0 )
  79.         {
  80.         switch_streams( new_in, new_out );
  81.         return yylex();
  82.         }
  83.  
  84.     // Switch to new input/output streams.  A nil stream pointer
  85.     // indicates "keep the current one".
  86.     virtual void switch_streams( FLEX_STD istream* new_in = 0,
  87.                     FLEX_STD ostream* new_out = 0 ) = 0;
  88.  
  89.     int lineno() const        { return yylineno; }
  90.  
  91.     int debug() const        { return yy_flex_debug; }
  92.     void set_debug( int flag )    { yy_flex_debug = flag; }
  93.  
  94. protected:
  95.     char* yytext;
  96.     int yyleng;
  97.     int yylineno;        // only maintained if you use %option yylineno
  98.     int yy_flex_debug;    // only has effect with -d or "%option debug"
  99. };
  100.  
  101. }
  102. #endif
  103.  
  104. #if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
  105. // Either this is the first time through (yyFlexLexerOnce not defined),
  106. // or this is a repeated include to define a different flavor of
  107. // yyFlexLexer, as discussed in the flex man page.
  108. #define yyFlexLexerOnce
  109.  
  110. extern "C++" {
  111.  
  112. class yyFlexLexer : public FlexLexer {
  113. public:
  114.     // arg_yyin and arg_yyout default to the cin and cout, but we
  115.     // only make that assignment when initializing in yylex().
  116.     yyFlexLexer( FLEX_STD istream* arg_yyin = 0, FLEX_STD ostream* arg_yyout = 0 );
  117.  
  118.     virtual ~yyFlexLexer();
  119.  
  120.     void yy_switch_to_buffer( struct yy_buffer_state* new_buffer );
  121.     struct yy_buffer_state* yy_create_buffer( FLEX_STD istream* s, int size );
  122.     void yy_delete_buffer( struct yy_buffer_state* b );
  123.     void yyrestart( FLEX_STD istream* s );
  124.  
  125.     void yypush_buffer_state( struct yy_buffer_state* new_buffer );
  126.     void yypop_buffer_state(void);
  127.  
  128.     virtual int yylex();
  129.     virtual void switch_streams( FLEX_STD istream* new_in, FLEX_STD ostream* new_out );
  130.  
  131. protected:
  132.     virtual int LexerInput( char* buf, int max_size );
  133.     virtual void LexerOutput( const char* buf, int size );
  134.     virtual void LexerError( const char* msg );
  135.  
  136.     void yyunput( int c, char* buf_ptr );
  137.     int yyinput();
  138.  
  139.     void yy_load_buffer_state();
  140.     void yy_init_buffer( struct yy_buffer_state* b, FLEX_STD istream* s );
  141.     void yy_flush_buffer( struct yy_buffer_state* b );
  142.  
  143.     int yy_start_stack_ptr;
  144.     int yy_start_stack_depth;
  145.     int* yy_start_stack;
  146.  
  147.     void yy_push_state( int new_state );
  148.     void yy_pop_state();
  149.     int yy_top_state();
  150.  
  151.     yy_state_type yy_get_previous_state();
  152.     yy_state_type yy_try_NUL_trans( yy_state_type current_state );
  153.     int yy_get_next_buffer();
  154.  
  155.     FLEX_STD istream* yyin;    // input source for default LexerInput
  156.     FLEX_STD ostream* yyout;    // output sink for default LexerOutput
  157.  
  158.     // yy_hold_char holds the character lost when yytext is formed.
  159.     char yy_hold_char;
  160.  
  161.     // Number of characters read into yy_ch_buf.
  162.     int yy_n_chars;
  163.  
  164.     // Points to current character in buffer.
  165.     char* yy_c_buf_p;
  166.  
  167.     int yy_init;        // whether we need to initialize
  168.     int yy_start;        // start state number
  169.  
  170.     // Flag which is used to allow yywrap()'s to do buffer switches
  171.     // instead of setting up a fresh yyin.  A bit of a hack ...
  172.     int yy_did_buffer_switch_on_eof;
  173.  
  174.  
  175.     size_t yy_buffer_stack_top; /**< index of top of stack. */
  176.     size_t yy_buffer_stack_max; /**< capacity of stack. */
  177.     struct yy_buffer_state ** yy_buffer_stack; /**< Stack as an array. */
  178.     void yyensure_buffer_stack(void);
  179.  
  180.     // The following are not always needed, but may be depending
  181.     // on use of certain flex features (like REJECT or yymore()).
  182.  
  183.     yy_state_type yy_last_accepting_state;
  184.     char* yy_last_accepting_cpos;
  185.  
  186.     yy_state_type* yy_state_buf;
  187.     yy_state_type* yy_state_ptr;
  188.  
  189.     char* yy_full_match;
  190.     int* yy_full_state;
  191.     int yy_full_lp;
  192.  
  193.     int yy_lp;
  194.     int yy_looking_for_trail_begin;
  195.  
  196.     int yy_more_flag;
  197.     int yy_more_len;
  198.     int yy_more_offset;
  199.     int yy_prev_more_offset;
  200. };
  201.  
  202. }
  203.  
  204. #endif
  205.